//+--------------------------------------------------------------------------
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//  Abstract:
//      Declaration of plugin class
//
//----------------------------------------------------------------------------


#pragma once
#include "resource.h"

#include "PluginSampleObject.h"

class ATL_NO_VTABLE CDeviceModelPluginSample : 
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CDeviceModelPluginSample, &CLSID_DeviceModelPluginSample>,
    public IDeviceModelPlugIn,
    public ISampleDeviceModelPrivateInterface

{
public:
    CDeviceModelPluginSample()
    {
        m_pOtherDeviceModel = NULL;
        m_hr = E_FAIL;
    }

    ~CDeviceModelPluginSample()
    {
        if ( m_pOtherDeviceModel )
        {
            m_pOtherDeviceModel->Release();
        }
    }


DECLARE_REGISTRY_RESOURCEID(IDR_DeviceModelPluginSample)


BEGIN_COM_MAP(CDeviceModelPluginSample)
    COM_INTERFACE_ENTRY(IDeviceModelPlugIn)
    COM_INTERFACE_ENTRY(ISampleDeviceModelPrivateInterface)   
END_COM_MAP()


    DECLARE_PROTECT_FINAL_CONSTRUCT()

    HRESULT FinalConstruct()
    {
        return S_OK;
    }
    
    void FinalRelease() 
    {
    }

public:

    //
    // Device Model Plugin Methods
    //
    STDMETHOD(Initialize)(
        BSTR bstrXML,
        UINT cNumModels,
        UINT iModelPosition
    );

    STDMETHOD(GetNumChannels)(
        UINT *pNumChannels
    );

    STDMETHOD(DeviceToColorimetricColors)(
        UINT cColors,
        UINT cChannels,
        const FLOAT *pDeviceValues,
        XYZColorF        *pXYZColors
    );

    STDMETHOD(ColorimetricToDeviceColors)(
        UINT cColors,
        UINT cChannels,
        const  XYZColorF * pXYZColors,
        FLOAT *pDeviceValues 
    );

    STDMETHOD(ColorimetricToDeviceColorsWithBlack)(
        UINT cColors,
        UINT cChannels,
        const  XYZColorF * pXYZColors,
        const BlackInformation *pBlackInformation,
        FLOAT *pDeviceValues 
    );

    STDMETHOD(GetPrimarySamples)(
        PrimaryXYZColors *pPrimaryColor
    );

    STDMETHOD(GetGamutBoundaryMeshSize)(
        UINT *pNumVertices,
        UINT *pNumTriangles
    );
        
    STDMETHOD(GetGamutBoundaryMesh)(
        UINT cChannels,
        UINT cVertices,
        UINT cTriangles,
        FLOAT *pVertices,
        GamutShellTriangle *pTriangles
    );

    STDMETHOD(GetNeutralAxisSize)(
        UINT *pcColors
    );
        
    STDMETHOD(GetNeutralAxis)(
        UINT cColors,
        XYZColorF *pXYZColors
    );

    STDMETHOD(SetTransformDeviceModelInfo)(
        UINT iModelPosition,
        IDeviceModelPlugIn *pIDeviceModelOther );

    STDMETHOD(SamplePrivateMethod)();

private:
    HRESULT m_hr;
    ISampleDeviceModelPrivateInterface *m_pOtherDeviceModel;
};

OBJECT_ENTRY_AUTO(__uuidof(DeviceModelPluginSample), CDeviceModelPluginSample)

const FLOAT g_sRGBVertices[] = 
{
    1.000f,   1.000f,  1.0f,
    1.000f,   1.000f,  0.972f,
    1.000f,   1.000f,  0.943f,
    1.000f,   1.000f,  0.913f,
    1.000f,   1.000f,  0.881f,
    1.000f,   1.000f,  0.847f,
    1.000f,   1.000f,  0.812f,
    1.000f,   1.000f,  0.775f,
    1.000f,   1.000f,  0.735f,
    1.000f,   1.000f,  0.693f,
    1.000f,   1.000f,  0.646f,
    1.000f,   1.000f,  0.595f,
    1.000f,   1.000f,  0.537f,
    1.000f,   1.000f,  0.47f,
    1.000f,   1.000f,  0.388f,
    1.000f,   1.000f,  0.277f,
    1.000f,   1.000f, 0.0f,
    1.000f,   0.972f,  1.0f,
    1.000f,   0.943f,  1.0f,
    1.000f,   0.913f,  1.0f,
    1.000f,   0.881f,  1.0f,
    1.000f,   0.848f,  1.0f,
    1.000f,   0.000f,  1.0f,
    1.000f,   0.000f,  0.972f,
    1.000f,   0.000f,  0.943f,
    1.000f,   0.000f,  0.913f,
    1.000f,   0.000f,  0.881f,
    1.000f,   0.000f,  0.847f,
    1.000f,   0.000f,  0.812f,
    1.000f,   0.000f,  0.775f,
    1.000f,   0.000f,  0.735f,
    1.000f,   0.000f,  0.693f,
    1.000f,   0.000f,  0.646f,
    1.000f,   0.000f,  0.595f,
    1.000f,   0.000f,  0.537f,
    1.000f,   0.000f,  0.47f,
    1.000f,   0.000f,  0.389f,
    1.000f,   0.000f,  0.277f,
    1.000f,   0.000f, 0.0f,
    0.972f,   1.000f,  1.0f,
    0.972f,   1.000f, 0.0f,
    0.972f,   0.972f,  1.0f,
    0.972f,   0.943f,  1.0f,
    0.972f,   0.913f,  1.0f,
    0.972f,   0.000f,  1.0f,
    0.972f,   0.000f,  0.972f,
    0.972f,   0.000f,  0.943f,
    0.972f,   0.000f,  0.913f,
    0.972f,   0.000f,  0.881f,
    0.972f,   0.000f,  0.847f,
    0.972f,   0.000f,  0.812f,
    0.972f,   0.000f,  0.775f,
    0.972f,   0.000f,  0.735f,
    0.972f,   0.000f,  0.693f,
    0.972f,   0.000f,  0.646f,
    0.972f,   0.000f,  0.595f,
    0.972f,   0.000f,  0.537f,
    0.972f,   0.000f,  0.47f,
    0.972f,   0.000f,  0.389f,
    0.972f,   0.000f,  0.277f,
    0.972f,   0.000f, 0.0f,
    0.943f,   1.000f,  1.0f,
    0.943f,   1.000f, 0.0f,
    0.943f,   0.972f,  1.0f,
    0.943f,   0.943f,  1.0f,
    0.943f,   0.913f,  1.0f,
    0.943f,   0.881f,  1.0f,
    0.943f,   0.000f,  1.0f,
    0.943f,   0.000f,  0.972f,
    0.943f,   0.000f,  0.943f,
    0.943f,   0.000f,  0.913f,
    0.943f,   0.000f,  0.881f,
    0.943f,   0.000f,  0.847f,
    0.943f,   0.000f,  0.812f,
    0.943f,   0.000f,  0.775f,
    0.943f,   0.000f,  0.735f,
    0.943f,   0.000f,  0.693f,
    0.943f,   0.000f,  0.646f,
    0.943f,   0.000f,  0.595f,
    0.943f,   0.000f,  0.537f,
    0.943f,   0.000f,  0.47f,
    0.943f,   0.000f,  0.389f,
    0.943f,   0.000f,  0.277f,
    0.943f,   0.000f, 0.0f,
    0.913f,   1.000f,  1.0f,
    0.913f,   1.000f, 0.0f,
    0.913f,   0.972f,  1.0f,
    0.913f,   0.943f,  1.0f,
    0.913f,   0.913f,  1.0f,
    0.913f,   0.881f,  1.0f,
    0.913f,   0.000f,  1.0f,
    0.913f,   0.000f,  0.972f,
    0.913f,   0.000f,  0.943f,
    0.913f,   0.000f,  0.913f,
    0.913f,   0.000f,  0.881f,
    0.913f,   0.000f,  0.847f,
    0.913f,   0.000f,  0.812f,
    0.913f,   0.000f,  0.775f,
    0.913f,   0.000f,  0.735f,
    0.913f,   0.000f,  0.693f,
    0.913f,   0.000f,  0.646f,
    0.913f,   0.000f,  0.595f,
    0.913f,   0.000f,  0.537f,
    0.913f,   0.000f,  0.47f,
    0.913f,   0.000f,  0.389f,
    0.913f,   0.000f,  0.277f,
    0.913f,   0.000f, 0.0f,
    0.881f,   1.000f,  1.0f,
    0.881f,   1.000f, 0.0f,
    0.881f,   0.943f,  1.0f,
    0.881f,   0.913f,  1.0f,
    0.881f,   0.881f,  1.0f,
    0.881f,   0.848f,  1.0f,
    0.881f,   0.000f,  1.0f,
    0.881f,   0.000f,  0.972f,
    0.881f,   0.000f,  0.943f,
    0.881f,   0.000f,  0.913f,
    0.881f,   0.000f,  0.881f,
    0.881f,   0.000f,  0.847f,
    0.881f,   0.000f,  0.812f,
    0.881f,   0.000f,  0.775f,
    0.881f,   0.000f,  0.735f,
    0.881f,   0.000f,  0.693f,
    0.881f,   0.000f,  0.646f,
    0.881f,   0.000f,  0.595f,
    0.881f,   0.000f,  0.537f,
    0.881f,   0.000f,  0.47f,
    0.881f,   0.000f,  0.389f,
    0.881f,   0.000f,  0.277f,
    0.881f,   0.000f, 0.0f,
    0.848f,   1.000f,  1.0f,
    0.848f,   1.000f, 0.0f,
    0.848f,   0.943f,  1.0f,
    0.848f,   0.913f,  1.0f,
    0.848f,   0.881f,  1.0f,
    0.848f,   0.848f,  1.0f,
    0.848f,   0.812f,  1.0f,
    0.848f,   0.000f,  1.0f,
    0.848f,   0.000f,  0.972f,
    0.848f,   0.000f,  0.943f,
    0.848f,   0.000f,  0.913f,
    0.848f,   0.000f,  0.881f,
    0.848f,   0.000f,  0.847f,
    0.848f,   0.000f,  0.812f,
    0.848f,   0.000f,  0.775f,
    0.848f,   0.000f,  0.735f,
    0.848f,   0.000f,  0.693f,
    0.848f,   0.000f,  0.646f,
    0.848f,   0.000f,  0.595f,
    0.848f,   0.000f,  0.537f,
    0.848f,   0.000f,  0.47f,
    0.848f,   0.000f,  0.389f,
    0.848f,   0.000f,  0.277f,
    0.848f,   0.000f, 0.0f,
    0.812f,   1.000f,  1.0f,
    0.812f,   1.000f, 0.0f,
    0.812f,   0.913f,  1.0f,
    0.812f,   0.881f,  1.0f,
    0.812f,   0.848f,  1.0f,
    0.812f,   0.812f,  1.0f,
    0.812f,   0.775f,  1.0f,
    0.812f,   0.735f,  1.0f,
    0.812f,   0.000f,  1.0f,
    0.812f,   0.000f,  0.972f,
    0.812f,   0.000f,  0.943f,
    0.812f,   0.000f,  0.913f,
    0.812f,   0.000f,  0.881f,
    0.812f,   0.000f,  0.847f,
    0.812f,   0.000f,  0.812f,
    0.812f,   0.000f,  0.775f,
    0.812f,   0.000f,  0.735f,
    0.812f,   0.000f,  0.693f,
    0.812f,   0.000f,  0.646f,
    0.812f,   0.000f,  0.595f,
    0.812f,   0.000f,  0.537f,
    0.812f,   0.000f,  0.47f,
    0.812f,   0.000f,  0.389f,
    0.812f,   0.000f,  0.277f,
    0.812f,   0.000f, 0.0f,
    0.775f,   1.000f,  1.0f,
    0.775f,   1.000f, 0.0f,
    0.775f,   0.913f,  1.0f,
    0.775f,   0.881f,  1.0f,
    0.775f,   0.848f,  1.0f,
    0.775f,   0.812f,  1.0f,
    0.775f,   0.775f,  1.0f,
    0.775f,   0.735f,  1.0f,
    0.775f,   0.693f,  1.0f,
    0.775f,   0.000f,  1.0f,
    0.775f,   0.000f,  0.972f,
    0.775f,   0.000f,  0.943f,
    0.775f,   0.000f,  0.913f,
    0.775f,   0.000f,  0.881f,
    0.775f,   0.000f,  0.847f,
    0.775f,   0.000f,  0.812f,
    0.775f,   0.000f,  0.775f,
    0.775f,   0.000f,  0.735f,
    0.775f,   0.000f,  0.693f,
    0.775f,   0.000f,  0.646f,
    0.775f,   0.000f,  0.595f,
    0.775f,   0.000f,  0.537f,
    0.775f,   0.000f,  0.47f,
    0.775f,   0.000f,  0.389f,
    0.775f,   0.000f,  0.277f,
    0.775f,   0.000f, 0.0f,
    0.735f,   1.000f,  1.0f,
    0.735f,   1.000f, 0.0f,
    0.735f,   0.881f,  1.0f,
    0.735f,   0.848f,  1.0f,
    0.735f,   0.812f,  1.0f,
    0.735f,   0.775f,  1.0f,
    0.735f,   0.735f,  1.0f,
    0.735f,   0.693f,  1.0f,
    0.735f,   0.646f,  1.0f,
    0.735f,   0.000f,  1.0f,
    0.735f,   0.000f,  0.972f,
    0.735f,   0.000f,  0.943f,
    0.735f,   0.000f,  0.913f,
    0.735f,   0.000f,  0.881f,
    0.735f,   0.000f,  0.847f,
    0.735f,   0.000f,  0.812f,
    0.735f,   0.000f,  0.775f,
    0.735f,   0.000f,  0.735f,
    0.735f,   0.000f,  0.693f,
    0.735f,   0.000f,  0.646f,
    0.735f,   0.000f,  0.595f,
    0.735f,   0.000f,  0.537f,
    0.735f,   0.000f,  0.47f,
    0.735f,   0.000f,  0.389f,
    0.735f,   0.000f,  0.277f,
    0.735f,   0.000f, 0.0f,
    0.693f,   1.000f,  1.0f,
    0.693f,   1.000f, 0.0f,
    0.693f,   0.881f,  1.0f,
    0.693f,   0.848f,  1.0f,
    0.693f,   0.812f,  1.0f,
    0.693f,   0.775f,  1.0f,
    0.693f,   0.735f,  1.0f,
    0.693f,   0.693f,  1.0f,
    0.693f,   0.646f,  1.0f,
    0.693f,   0.595f,  1.0f,
    0.693f,   0.000f,  1.0f,
    0.693f,   0.000f,  0.972f,
    0.693f,   0.000f,  0.943f,
    0.693f,   0.000f,  0.913f,
    0.693f,   0.000f,  0.881f,
    0.693f,   0.000f,  0.847f,
    0.693f,   0.000f,  0.812f,
    0.693f,   0.000f,  0.775f,
    0.693f,   0.000f,  0.735f,
    0.693f,   0.000f,  0.693f,
    0.693f,   0.000f,  0.646f,
    0.693f,   0.000f,  0.595f,
    0.693f,   0.000f,  0.537f,
    0.693f,   0.000f,  0.47f,
    0.693f,   0.000f,  0.389f,
    0.693f,   0.000f,  0.277f,
    0.693f,   0.000f, 0.0f,
    0.646f,   1.000f,  1.0f,
    0.646f,   1.000f, 0.0f,
    0.646f,   0.848f,  1.0f,
    0.646f,   0.812f,  1.0f,
    0.646f,   0.775f,  1.0f,
    0.646f,   0.735f,  1.0f,
    0.646f,   0.693f,  1.0f,
    0.646f,   0.646f,  1.0f,
    0.646f,   0.595f,  1.0f,
    0.646f,   0.537f,  1.0f,
    0.646f,   0.470f,  1.0f,
    0.646f,   0.389f,  1.0f,
    0.646f,   0.277f,  1.0f,
    0.646f,   0.000f,  1.0f,
    0.646f,   0.000f,  0.972f,
    0.646f,   0.000f,  0.943f,
    0.646f,   0.000f,  0.913f,
    0.646f,   0.000f,  0.881f,
    0.646f,   0.000f,  0.847f,
    0.646f,   0.000f,  0.812f,
    0.646f,   0.000f,  0.775f,
    0.646f,   0.000f,  0.735f,
    0.646f,   0.000f,  0.693f,
    0.646f,   0.000f,  0.646f,
    0.646f,   0.000f,  0.595f,
    0.646f,   0.000f,  0.537f,
    0.646f,   0.000f,  0.47f,
    0.646f,   0.000f,  0.389f,
    0.646f,   0.000f,  0.277f,
    0.646f,   0.000f, 0.0f,
    0.595f,   1.000f,  1.0f,
    0.595f,   1.000f, 0.0f,
    0.595f,   0.848f,  1.0f,
    0.595f,   0.812f,  1.0f,
    0.595f,   0.775f,  1.0f,
    0.595f,   0.735f,  1.0f,
    0.595f,   0.693f,  1.0f,
    0.595f,   0.646f,  1.0f,
    0.595f,   0.595f,  1.0f,
    0.595f,   0.537f,  1.0f,
    0.595f,   0.470f,  1.0f,
    0.595f,   0.389f,  1.0f,
    0.595f,   0.277f,  1.0f,
    0.595f,   0.000f,  1.0f,
    0.595f,   0.000f,  0.972f,
    0.595f,   0.000f,  0.943f,
    0.595f,   0.000f,  0.913f,
    0.595f,   0.000f,  0.881f,
    0.595f,   0.000f,  0.847f,
    0.595f,   0.000f,  0.812f,
    0.595f,   0.000f,  0.775f,
    0.595f,   0.000f,  0.735f,
    0.595f,   0.000f,  0.693f,
    0.595f,   0.000f,  0.646f,
    0.595f,   0.000f,  0.595f,
    0.595f,   0.000f,  0.537f,
    0.595f,   0.000f,  0.47f,
    0.595f,   0.000f,  0.389f,
    0.595f,   0.000f,  0.277f,
    0.595f,   0.000f, 0.0f,
    0.537f,   1.000f,  1.0f,
    0.537f,   1.000f, 0.0f,
    0.537f,   0.812f,  1.0f,
    0.537f,   0.775f,  1.0f,
    0.537f,   0.735f,  1.0f,
    0.537f,   0.693f,  1.0f,
    0.537f,   0.646f,  1.0f,
    0.537f,   0.595f,  1.0f,
    0.537f,   0.537f,  1.0f,
    0.537f,   0.470f,  1.0f,
    0.537f,   0.389f,  1.0f,
    0.537f,   0.277f,  1.0f,
    0.537f,   0.000f,  1.0f,
    0.537f,   0.000f,  0.972f,
    0.537f,   0.000f,  0.943f,
    0.537f,   0.000f,  0.913f,
    0.537f,   0.000f,  0.881f,
    0.537f,   0.000f,  0.847f,
    0.537f,   0.000f,  0.812f,
    0.537f,   0.000f,  0.775f,
    0.537f,   0.000f,  0.735f,
    0.537f,   0.000f,  0.693f,
    0.537f,   0.000f,  0.646f,
    0.537f,   0.000f,  0.595f,
    0.537f,   0.000f,  0.537f,
    0.537f,   0.000f,  0.47f,
    0.537f,   0.000f,  0.389f,
    0.537f,   0.000f,  0.277f,
    0.537f,   0.000f, 0.0f,
    0.470f,   1.000f,  1.0f,
    0.470f,   1.000f, 0.0f,
    0.470f,   0.812f,  1.0f,
    0.470f,   0.775f,  1.0f,
    0.470f,   0.735f,  1.0f,
    0.470f,   0.693f,  1.0f,
    0.470f,   0.646f,  1.0f,
    0.470f,   0.595f,  1.0f,
    0.470f,   0.537f,  1.0f,
    0.470f,   0.470f,  1.0f,
    0.470f,   0.389f,  1.0f,
    0.470f,   0.277f,  1.0f,
    0.470f,   0.000f,  1.0f,
    0.470f,   0.000f,  0.972f,
    0.470f,   0.000f,  0.943f,
    0.470f,   0.000f,  0.913f,
    0.470f,   0.000f,  0.881f,
    0.470f,   0.000f,  0.847f,
    0.470f,   0.000f,  0.812f,
    0.470f,   0.000f,  0.775f,
    0.470f,   0.000f,  0.735f,
    0.470f,   0.000f,  0.693f,
    0.470f,   0.000f,  0.646f,
    0.470f,   0.000f,  0.595f,
    0.470f,   0.000f,  0.537f,
    0.470f,   0.000f,  0.47f,
    0.470f,   0.000f,  0.389f,
    0.470f,   0.000f,  0.277f,
    0.470f,   0.000f, 0.0f,
    0.389f,   1.000f,  1.0f,
    0.389f,   1.000f, 0.0f,
    0.389f,   0.812f,  1.0f,
    0.389f,   0.775f,  1.0f,
    0.389f,   0.735f,  1.0f,
    0.389f,   0.693f,  1.0f,
    0.389f,   0.646f,  1.0f,
    0.389f,   0.595f,  1.0f,
    0.389f,   0.537f,  1.0f,
    0.389f,   0.470f,  1.0f,
    0.389f,   0.389f,  1.0f,
    0.389f,   0.277f,  1.0f,
    0.389f,   0.001f,  1.0f,
    0.389f,   0.000f,  0.972f,
    0.389f,   0.000f,  0.943f,
    0.389f,   0.000f,  0.913f,
    0.389f,   0.000f,  0.881f,
    0.389f,   0.000f,  0.847f,
    0.389f,   0.000f,  0.812f,
    0.389f,   0.000f,  0.775f,
    0.389f,   0.000f,  0.735f,
    0.389f,   0.000f,  0.693f,
    0.389f,   0.000f,  0.646f,
    0.389f,   0.000f,  0.595f,
    0.389f,   0.000f,  0.537f,
    0.389f,   0.000f,  0.47f,
    0.389f,   0.000f,  0.389f,
    0.389f,   0.000f,  0.277f,
    0.389f,   0.000f, 0.0f,
    0.277f,   1.000f,  1.0f,
    0.277f,   1.000f, 0.0f,
    0.277f,   0.775f,  1.0f,
    0.277f,   0.735f,  1.0f,
    0.277f,   0.693f,  1.0f,
    0.277f,   0.646f,  1.0f,
    0.277f,   0.595f,  1.0f,
    0.277f,   0.537f,  1.0f,
    0.277f,   0.470f,  1.0f,
    0.277f,   0.389f,  1.0f,
    0.277f,   0.277f,  1.0f,
    0.277f,   0.001f,  1.0f,
    0.277f,   0.001f,  0.972f,
    0.277f,   0.001f,  0.943f,
    0.277f,   0.000f,  0.913f,
    0.277f,   0.000f,  0.881f,
    0.277f,   0.000f,  0.847f,
    0.277f,   0.000f,  0.812f,
    0.277f,   0.000f,  0.775f,
    0.277f,   0.000f,  0.735f,
    0.277f,   0.000f,  0.693f,
    0.277f,   0.000f,  0.646f,
    0.277f,   0.000f,  0.595f,
    0.277f,   0.000f,  0.537f,
    0.277f,   0.000f,  0.47f,
    0.277f,   0.000f,  0.389f,
    0.277f,   0.000f,  0.277f,
    0.277f,   0.000f, 0.0f,
    0.001f,   1.000f,  1.0f,
    0.000f,   1.000f, 0.0f,
    0.001f,   0.972f,  1.0f,
    0.000f,   0.972f, 0.0f,
    0.001f,   0.943f,  1.0f,
    0.000f,   0.943f, 0.0f,
    0.001f,   0.913f,  1.0f,
    0.000f,   0.913f, 0.0f,
    0.001f,   0.881f,  1.0f,
    0.000f,   0.881f, 0.0f,
    0.001f,   0.848f,  1.0f,
    0.000f,   0.848f, 0.0f,
    0.001f,   0.812f,  1.0f,
    0.000f,   0.812f, 0.0f,
    0.001f,   0.775f,  1.0f,
    0.000f,   0.775f, 0.0f,
    0.001f,   0.735f,  1.0f,
    0.000f,   0.735f, 0.0f,
    0.001f,   0.693f,  1.0f,
    0.000f,   0.693f, 0.0f,
    0.001f,   0.646f,  1.0f,
    0.000f,   0.646f, 0.0f,
    0.001f,   0.595f,  1.0f,
    0.000f,   0.595f, 0.0f,
    0.001f,   0.537f,  1.0f,
    0.000f,   0.537f, 0.0f,
    0.001f,   0.470f,  1.0f,
    0.000f,   0.470f, 0.0f,
    0.001f,   0.389f,  1.0f,
    0.000f,   0.389f, 0.0f,
    0.001f,   0.277f,  1.0f,
    0.000f,   0.277f, 0.0f,
    0.001f,   0.001f,  1.0f,
    0.001f,   0.001f,  0.972f,
    0.001f,   0.001f,  0.943f,
    0.001f,   0.001f,  0.913f,
    0.001f,   0.000f,  0.881f,
    0.001f,   0.000f,  0.847f,
    0.001f,   0.000f,  0.812f,
    0.001f,   0.000f,  0.775f,
    0.001f,   0.000f,  0.735f,
    0.000f,   0.000f,  0.693f,
    0.000f,   0.000f,  0.646f,
    0.000f,   0.000f,  0.595f,
    0.000f,   0.000f,  0.537f,
    0.000f,   0.000f,  0.47f,
    0.000f,   0.000f,  0.389f,
    0.000f,   0.000f,  0.277f,
    0.000f,   0.000f, 0.0f,
};

const ULONG g_NumsRGBVertices = sizeof(g_sRGBVertices)/(3*sizeof(g_sRGBVertices[0]));

const GamutShellTriangle g_sRGBTriangles[] =
{
    { 432 ,  431 ,  481 } ,
    { 464 ,  432 ,  481 } ,
    { 480 ,  464 ,  481 } ,
    { 431 ,  480 ,  481 } ,
    { 430 ,  429 ,  480 } ,
    { 431 ,  430 ,  480 } ,
    { 479 ,  464 ,  480 } ,
    { 429 ,  479 ,  480 } ,
    { 429 ,  428 ,  479 } ,
    { 478 ,  464 ,  479 } ,
    { 428 ,  478 ,  479 } ,
    { 428 ,  427 ,  478 } ,
    { 477 ,  464 ,  478 } ,
    { 427 ,  477 ,  478 } ,
    { 427 ,  426 ,  477 } ,
    { 426 ,  476 ,  477 } ,
    { 476 ,  464 ,  477 } ,
    { 475 ,  464 ,  476 } ,
    { 426 ,  475 ,  476 } ,
    { 426 ,  425 ,  475 } ,
    { 474 ,  464 ,  475 } ,
    { 425 ,  474 ,  475 } ,
    { 425 ,  424 ,  474 } ,
    { 473 ,  464 ,  474 } ,
    { 424 ,  473 ,  474 } ,
    { 424 ,  423 ,  473 } ,
    { 423 ,  472 ,  473 } ,
    { 472 ,  464 ,  473 } ,
    { 471 ,  464 ,  472 } ,
    { 423 ,  471 ,  472 } ,
    { 423 ,  422 ,  471 } ,
    { 470 ,  464 ,  471 } ,
    { 422 ,  470 ,  471 } ,
    { 422 ,  421 ,  470 } ,
    { 469 ,  464 ,  470 } ,
    { 421 ,  469 ,  470 } ,
    { 421 ,  420 ,  469 } ,
    { 468 ,  464 ,  469 } ,
    { 420 ,  468 ,  469 } ,
    { 420 ,  419 ,  468 } ,
    { 419 ,  467 ,  468 } ,
    { 467 ,  464 ,  468 } ,
    { 466 ,  464 ,  467 } ,
    { 419 ,  466 ,  467 } ,
    { 419 ,  418 ,  466 } ,
    { 465 ,  464 ,  466 } ,
    { 418 ,  465 ,  466 } ,
    { 417 ,  416 ,  465 } ,
    { 418 ,  417 ,  465 } ,
    { 435 ,  434 ,  465 } ,
    { 434 ,  436 ,  465 } ,
    { 437 ,  435 ,  465 } ,
    { 436 ,  438 ,  465 } ,
    { 439 ,  437 ,  465 } ,
    { 438 ,  440 ,  465 } ,
    { 441 ,  439 ,  465 } ,
    { 440 ,  442 ,  465 } ,
    { 443 ,  441 ,  465 } ,
    { 442 ,  444 ,  465 } ,
    { 445 ,  443 ,  465 } ,
    { 444 ,  446 ,  465 } ,
    { 447 ,  445 ,  465 } ,
    { 446 ,  448 ,  465 } ,
    { 449 ,  447 ,  465 } ,
    { 448 ,  450 ,  465 } ,
    { 451 ,  449 ,  465 } ,
    { 450 ,  452 ,  465 } ,
    { 453 ,  451 ,  465 } ,
    { 452 ,  454 ,  465 } ,
    { 455 ,  453 ,  465 } ,
    { 454 ,  456 ,  465 } ,
    { 457 ,  455 ,  465 } ,
    { 456 ,  458 ,  465 } ,
    { 459 ,  457 ,  465 } ,
    { 458 ,  460 ,  465 } ,
    { 461 ,  459 ,  465 } ,
    { 460 ,  462 ,  465 } ,
    { 463 ,  461 ,  465 } ,
    { 416 ,  463 ,  465 } ,
    { 462 ,  464 ,  465 } ,
    { 346 ,  375 ,  464 } ,
    { 375 ,  404 ,  464 } ,
    { 404 ,  432 ,  464 } ,
    { 462 ,  346 ,  464 } ,
    { 416 ,  415 ,  463 } ,
    { 415 ,  461 ,  463 } ,
    { 257 ,  287 ,  462 } ,
    { 287 ,  317 ,  462 } ,
    { 317 ,  346 ,  462 } ,
    { 460 ,  257 ,  462 } ,
    { 415 ,  414 ,  461 } ,
    { 414 ,  459 ,  461 } ,
    { 204 ,  230 ,  460 } ,
    { 230 ,  257 ,  460 } ,
    { 458 ,  204 ,  460 } ,
    { 413 ,  412 ,  459 } ,
    { 414 ,  413 ,  459 } ,
    { 412 ,  457 ,  459 } ,
    { 129 ,  153 ,  458 } ,
    { 153 ,  178 ,  458 } ,
    { 178 ,  204 ,  458 } ,
    { 456 ,  129 ,  458 } ,
    { 412 ,  411 ,  457 } ,
    { 411 ,  455 ,  457 } ,
    { 60 ,  83 ,  456 } ,
    { 83 ,  106 ,  456 } ,
    { 106 ,  129 ,  456 } ,
    { 454 ,  60 ,  456 } ,
    { 411 ,  410 ,  455 } ,
    { 410 ,  453 ,  455 } ,
    { 38 ,  60 ,  454 } ,
    { 452 ,  38 ,  454 } ,
    { 410 ,  409 ,  453 } ,
    { 409 ,  451 ,  453 } ,
    { 450 ,  38 ,  452 } ,
    { 409 ,  408 ,  451 } ,
    { 408 ,  449 ,  451 } ,
    { 448 ,  38 ,  450 } ,
    { 408 ,  407 ,  449 } ,
    { 407 ,  447 ,  449 } ,
    { 446 ,  38 ,  448 } ,
    { 407 ,  433 ,  447 } ,
    { 433 ,  445 ,  447 } ,
    { 444 ,  38 ,  446 } ,
    { 433 ,  443 ,  445 } ,
    { 442 ,  38 ,  444 } ,
    { 433 ,  441 ,  443 } ,
    { 440 ,  38 ,  442 } ,
    { 433 ,  439 ,  441 } ,
    { 438 ,  38 ,  440 } ,
    { 433 ,  437 ,  439 } ,
    { 436 ,  38 ,  438 } ,
    { 433 ,  435 ,  437 } ,
    { 434 ,  38 ,  436 } ,
    { 433 ,  434 ,  435 } ,
    { 179 ,  16 ,  434 } ,
    { 205 ,  179 ,  434 } ,
    { 231 ,  205 ,  434 } ,
    { 16 ,  406 ,  434 } ,
    { 406 ,  38 ,  434 } ,
    { 433 ,  231 ,  434 } ,
    { 258 ,  231 ,  433 } ,
    { 260 ,  233 ,  433 } ,
    { 288 ,  258 ,  433 } ,
    { 290 ,  260 ,  433 } ,
    { 318 ,  288 ,  433 } ,
    { 320 ,  290 ,  433 } ,
    { 347 ,  318 ,  433 } ,
    { 349 ,  320 ,  433 } ,
    { 376 ,  347 ,  433 } ,
    { 378 ,  349 ,  433 } ,
    { 405 ,  376 ,  433 } ,
    { 233 ,  405 ,  433 } ,
    { 407 ,  378 ,  433 } ,
    { 374 ,  403 ,  432 } ,
    { 404 ,  374 ,  432 } ,
    { 403 ,  431 ,  432 } ,
    { 402 ,  401 ,  431 } ,
    { 403 ,  402 ,  431 } ,
    { 401 ,  430 ,  431 } ,
    { 401 ,  400 ,  430 } ,
    { 400 ,  429 ,  430 } ,
    { 399 ,  398 ,  429 } ,
    { 400 ,  399 ,  429 } ,
    { 398 ,  428 ,  429 } ,
    { 398 ,  397 ,  428 } ,
    { 397 ,  427 ,  428 } ,
    { 396 ,  395 ,  427 } ,
    { 397 ,  396 ,  427 } ,
    { 395 ,  426 ,  427 } ,
    { 395 ,  394 ,  426 } ,
    { 394 ,  425 ,  426 } ,
    { 394 ,  393 ,  425 } ,
    { 393 ,  424 ,  425 } ,
    { 393 ,  392 ,  424 } ,
    { 392 ,  423 ,  424 } ,
    { 392 ,  391 ,  423 } ,
    { 391 ,  422 ,  423 } ,
    { 391 ,  390 ,  422 } ,
    { 390 ,  421 ,  422 } ,
    { 390 ,  389 ,  421 } ,
    { 389 ,  420 ,  421 } ,
    { 389 ,  419 ,  420 } ,
    { 389 ,  388 ,  419 } ,
    { 388 ,  418 ,  419 } ,
    { 388 ,  417 ,  418 } ,
    { 388 ,  416 ,  417 } ,
    { 388 ,  415 ,  416 } ,
    { 388 ,  387 ,  415 } ,
    { 387 ,  414 ,  415 } ,
    { 386 ,  385 ,  414 } ,
    { 387 ,  386 ,  414 } ,
    { 385 ,  413 ,  414 } ,
    { 385 ,  384 ,  413 } ,
    { 384 ,  412 ,  413 } ,
    { 384 ,  383 ,  412 } ,
    { 383 ,  411 ,  412 } ,
    { 383 ,  382 ,  411 } ,
    { 382 ,  410 ,  411 } ,
    { 382 ,  381 ,  410 } ,
    { 381 ,  409 ,  410 } ,
    { 381 ,  380 ,  409 } ,
    { 380 ,  408 ,  409 } ,
    { 380 ,  379 ,  408 } ,
    { 379 ,  407 ,  408 } ,
    { 379 ,  378 ,  407 } ,
    { 16 ,  377 ,  406 } ,
    { 377 ,  38 ,  406 } ,
    { 233 ,  181 ,  405 } ,
    { 181 ,  376 ,  405 } ,
    { 345 ,  374 ,  404 } ,
    { 375 ,  345 ,  404 } ,
    { 344 ,  373 ,  403 } ,
    { 374 ,  344 ,  403 } ,
    { 373 ,  402 ,  403 } ,
    { 372 ,  371 ,  402 } ,
    { 373 ,  372 ,  402 } ,
    { 371 ,  401 ,  402 } ,
    { 371 ,  370 ,  401 } ,
    { 370 ,  400 ,  401 } ,
    { 370 ,  369 ,  400 } ,
    { 369 ,  399 ,  400 } ,
    { 368 ,  367 ,  399 } ,
    { 369 ,  368 ,  399 } ,
    { 367 ,  398 ,  399 } ,
    { 367 ,  366 ,  398 } ,
    { 366 ,  397 ,  398 } ,
    { 366 ,  365 ,  397 } ,
    { 365 ,  396 ,  397 } ,
    { 365 ,  364 ,  396 } ,
    { 364 ,  395 ,  396 } ,
    { 364 ,  363 ,  395 } ,
    { 363 ,  394 ,  395 } ,
    { 362 ,  361 ,  394 } ,
    { 363 ,  362 ,  394 } ,
    { 361 ,  393 ,  394 } ,
    { 361 ,  360 ,  393 } ,
    { 360 ,  392 ,  393 } ,
    { 360 ,  359 ,  392 } ,
    { 359 ,  391 ,  392 } ,
    { 359 ,  390 ,  391 } ,
    { 359 ,  389 ,  390 } ,
    { 359 ,  388 ,  389 } ,
    { 359 ,  387 ,  388 } ,
    { 359 ,  358 ,  387 } ,
    { 358 ,  386 ,  387 } ,
    { 357 ,  356 ,  386 } ,
    { 358 ,  357 ,  386 } ,
    { 356 ,  385 ,  386 } ,
    { 356 ,  355 ,  385 } ,
    { 355 ,  384 ,  385 } ,
    { 355 ,  354 ,  384 } ,
    { 354 ,  383 ,  384 } ,
    { 354 ,  353 ,  383 } ,
    { 353 ,  382 ,  383 } ,
    { 353 ,  352 ,  382 } ,
    { 352 ,  381 ,  382 } ,
    { 352 ,  351 ,  381 } ,
    { 351 ,  380 ,  381 } ,
    { 351 ,  350 ,  380 } ,
    { 350 ,  379 ,  380 } ,
    { 350 ,  349 ,  379 } ,
    { 349 ,  378 ,  379 } ,
    { 16 ,  348 ,  377 } ,
    { 348 ,  38 ,  377 } ,
    { 181 ,  347 ,  376 } ,
    { 316 ,  345 ,  375 } ,
    { 346 ,  316 ,  375 } ,
    { 315 ,  344 ,  374 } ,
    { 345 ,  315 ,  374 } ,
    { 344 ,  343 ,  373 } ,
    { 343 ,  372 ,  373 } ,
    { 343 ,  342 ,  372 } ,
    { 342 ,  371 ,  372 } ,
    { 341 ,  340 ,  371 } ,
    { 342 ,  341 ,  371 } ,
    { 340 ,  370 ,  371 } ,
    { 340 ,  339 ,  370 } ,
    { 339 ,  369 ,  370 } ,
    { 339 ,  338 ,  369 } ,
    { 338 ,  368 ,  369 } ,
    { 338 ,  337 ,  368 } ,
    { 337 ,  367 ,  368 } ,
    { 336 ,  335 ,  367 } ,
    { 337 ,  336 ,  367 } ,
    { 335 ,  366 ,  367 } ,
    { 335 ,  334 ,  366 } ,
    { 334 ,  365 ,  366 } ,
    { 334 ,  333 ,  365 } ,
    { 333 ,  364 ,  365 } ,
    { 333 ,  332 ,  364 } ,
    { 332 ,  363 ,  364 } ,
    { 332 ,  331 ,  363 } ,
    { 331 ,  362 ,  363 } ,
    { 331 ,  330 ,  362 } ,
    { 330 ,  361 ,  362 } ,
    { 330 ,  360 ,  361 } ,
    { 330 ,  359 ,  360 } ,
    { 330 ,  358 ,  359 } ,
    { 330 ,  329 ,  358 } ,
    { 329 ,  357 ,  358 } ,
    { 328 ,  327 ,  357 } ,
    { 329 ,  328 ,  357 } ,
    { 327 ,  356 ,  357 } ,
    { 327 ,  326 ,  356 } ,
    { 326 ,  355 ,  356 } ,
    { 326 ,  325 ,  355 } ,
    { 325 ,  354 ,  355 } ,
    { 325 ,  324 ,  354 } ,
    { 324 ,  353 ,  354 } ,
    { 324 ,  323 ,  353 } ,
    { 323 ,  352 ,  353 } ,
    { 323 ,  322 ,  352 } ,
    { 322 ,  351 ,  352 } ,
    { 292 ,  321 ,  351 } ,
    { 322 ,  292 ,  351 } ,
    { 321 ,  350 ,  351 } ,
    { 291 ,  320 ,  350 } ,
    { 321 ,  291 ,  350 } ,
    { 320 ,  349 ,  350 } ,
    { 16 ,  319 ,  348 } ,
    { 319 ,  38 ,  348 } ,
    { 181 ,  318 ,  347 } ,
    { 286 ,  316 ,  346 } ,
    { 317 ,  286 ,  346 } ,
    { 285 ,  315 ,  345 } ,
    { 316 ,  285 ,  345 } ,
    { 284 ,  314 ,  344 } ,
    { 315 ,  284 ,  344 } ,
    { 314 ,  343 ,  344 } ,
    { 314 ,  313 ,  343 } ,
    { 313 ,  342 ,  343 } ,
    { 313 ,  312 ,  342 } ,
    { 312 ,  341 ,  342 } ,
    { 311 ,  310 ,  341 } ,
    { 312 ,  311 ,  341 } ,
    { 310 ,  340 ,  341 } ,
    { 310 ,  309 ,  340 } ,
    { 309 ,  339 ,  340 } ,
    { 309 ,  308 ,  339 } ,
    { 308 ,  338 ,  339 } ,
    { 308 ,  307 ,  338 } ,
    { 307 ,  337 ,  338 } ,
    { 307 ,  306 ,  337 } ,
    { 306 ,  336 ,  337 } ,
    { 305 ,  304 ,  336 } ,
    { 306 ,  305 ,  336 } ,
    { 304 ,  335 ,  336 } ,
    { 304 ,  303 ,  335 } ,
    { 303 ,  334 ,  335 } ,
    { 303 ,  302 ,  334 } ,
    { 302 ,  333 ,  334 } ,
    { 302 ,  301 ,  333 } ,
    { 301 ,  332 ,  333 } ,
    { 301 ,  331 ,  332 } ,
    { 301 ,  330 ,  331 } ,
    { 301 ,  329 ,  330 } ,
    { 301 ,  300 ,  329 } ,
    { 300 ,  328 ,  329 } ,
    { 299 ,  298 ,  328 } ,
    { 300 ,  299 ,  328 } ,
    { 298 ,  327 ,  328 } ,
    { 298 ,  297 ,  327 } ,
    { 297 ,  326 ,  327 } ,
    { 297 ,  296 ,  326 } ,
    { 296 ,  325 ,  326 } ,
    { 296 ,  295 ,  325 } ,
    { 295 ,  324 ,  325 } ,
    { 295 ,  294 ,  324 } ,
    { 294 ,  323 ,  324 } ,
    { 294 ,  293 ,  323 } ,
    { 293 ,  322 ,  323 } ,
    { 262 ,  292 ,  322 } ,
    { 293 ,  262 ,  322 } ,
    { 261 ,  291 ,  321 } ,
    { 292 ,  261 ,  321 } ,
    { 260 ,  290 ,  320 } ,
    { 291 ,  260 ,  320 } ,
    { 16 ,  289 ,  319 } ,
    { 289 ,  38 ,  319 } ,
    { 181 ,  288 ,  318 } ,
    { 287 ,  286 ,  317 } ,
    { 255 ,  285 ,  316 } ,
    { 286 ,  255 ,  316 } ,
    { 254 ,  284 ,  315 } ,
    { 285 ,  254 ,  315 } ,
    { 284 ,  283 ,  314 } ,
    { 283 ,  313 ,  314 } ,
    { 283 ,  282 ,  313 } ,
    { 282 ,  312 ,  313 } ,
    { 282 ,  281 ,  312 } ,
    { 281 ,  311 ,  312 } ,
    { 280 ,  279 ,  311 } ,
    { 281 ,  280 ,  311 } ,
    { 279 ,  310 ,  311 } ,
    { 279 ,  278 ,  310 } ,
    { 278 ,  309 ,  310 } ,
    { 278 ,  277 ,  309 } ,
    { 277 ,  308 ,  309 } ,
    { 277 ,  276 ,  308 } ,
    { 276 ,  307 ,  308 } ,
    { 276 ,  275 ,  307 } ,
    { 275 ,  306 ,  307 } ,
    { 275 ,  274 ,  306 } ,
    { 274 ,  305 ,  306 } ,
    { 274 ,  273 ,  305 } ,
    { 273 ,  304 ,  305 } ,
    { 272 ,  271 ,  304 } ,
    { 273 ,  272 ,  304 } ,
    { 271 ,  303 ,  304 } ,
    { 271 ,  302 ,  303 } ,
    { 271 ,  301 ,  302 } ,
    { 271 ,  300 ,  301 } ,
    { 241 ,  270 ,  300 } ,
    { 271 ,  241 ,  300 } ,
    { 270 ,  299 ,  300 } ,
    { 269 ,  268 ,  299 } ,
    { 22 ,  269 ,  299 } ,
    { 270 ,  22 ,  299 } ,
    { 268 ,  298 ,  299 } ,
    { 268 ,  267 ,  298 } ,
    { 267 ,  297 ,  298 } ,
    { 267 ,  266 ,  297 } ,
    { 266 ,  296 ,  297 } ,
    { 266 ,  265 ,  296 } ,
    { 265 ,  295 ,  296 } ,
    { 265 ,  264 ,  295 } ,
    { 264 ,  294 ,  295 } ,
    { 264 ,  263 ,  294 } ,
    { 263 ,  293 ,  294 } ,
    { 236 ,  262 ,  293 } ,
    { 263 ,  236 ,  293 } ,
    { 235 ,  261 ,  292 } ,
    { 262 ,  235 ,  292 } ,
    { 234 ,  260 ,  291 } ,
    { 261 ,  234 ,  291 } ,
    { 16 ,  259 ,  289 } ,
    { 259 ,  38 ,  289 } ,
    { 156 ,  132 ,  288 } ,
    { 181 ,  156 ,  288 } ,
    { 132 ,  258 ,  288 } ,
    { 257 ,  256 ,  287 } ,
    { 256 ,  286 ,  287 } ,
    { 228 ,  255 ,  286 } ,
    { 256 ,  228 ,  286 } ,
    { 227 ,  254 ,  285 } ,
    { 255 ,  227 ,  285 } ,
    { 226 ,  253 ,  284 } ,
    { 254 ,  226 ,  284 } ,
    { 253 ,  283 ,  284 } ,
    { 253 ,  252 ,  283 } ,
    { 252 ,  282 ,  283 } ,
    { 252 ,  251 ,  282 } ,
    { 251 ,  281 ,  282 } ,
    { 251 ,  250 ,  281 } ,
    { 250 ,  280 ,  281 } ,
    { 249 ,  248 ,  280 } ,
    { 250 ,  249 ,  280 } ,
    { 248 ,  279 ,  280 } ,
    { 248 ,  247 ,  279 } ,
    { 247 ,  278 ,  279 } ,
    { 247 ,  246 ,  278 } ,
    { 246 ,  277 ,  278 } ,
    { 246 ,  245 ,  277 } ,
    { 245 ,  276 ,  277 } ,
    { 245 ,  244 ,  276 } ,
    { 244 ,  275 ,  276 } ,
    { 244 ,  243 ,  275 } ,
    { 243 ,  274 ,  275 } ,
    { 243 ,  242 ,  274 } ,
    { 242 ,  273 ,  274 } ,
    { 242 ,  241 ,  273 } ,
    { 241 ,  272 ,  273 } ,
    { 241 ,  271 ,  272 } ,
    { 214 ,  22 ,  270 } ,
    { 241 ,  214 ,  270 } ,
    { 22 ,  268 ,  269 } ,
    { 22 ,  267 ,  268 } ,
    { 22 ,  240 ,  267 } ,
    { 240 ,  266 ,  267 } ,
    { 240 ,  239 ,  266 } ,
    { 239 ,  265 ,  266 } ,
    { 239 ,  238 ,  265 } ,
    { 238 ,  264 ,  265 } ,
    { 238 ,  237 ,  264 } ,
    { 237 ,  263 ,  264 } ,
    { 237 ,  236 ,  263 } ,
    { 209 ,  235 ,  262 } ,
    { 236 ,  209 ,  262 } ,
    { 208 ,  234 ,  261 } ,
    { 235 ,  208 ,  261 } ,
    { 207 ,  233 ,  260 } ,
    { 234 ,  207 ,  260 } ,
    { 16 ,  232 ,  259 } ,
    { 232 ,  38 ,  259 } ,
    { 132 ,  231 ,  258 } ,
    { 230 ,  229 ,  257 } ,
    { 229 ,  256 ,  257 } ,
    { 202 ,  228 ,  256 } ,
    { 229 ,  202 ,  256 } ,
    { 201 ,  227 ,  255 } ,
    { 228 ,  201 ,  255 } ,
    { 200 ,  226 ,  254 } ,
    { 227 ,  200 ,  254 } ,
    { 199 ,  225 ,  253 } ,
    { 226 ,  199 ,  253 } ,
    { 225 ,  252 ,  253 } ,
    { 225 ,  224 ,  252 } ,
    { 224 ,  251 ,  252 } ,
    { 224 ,  223 ,  251 } ,
    { 223 ,  250 ,  251 } ,
    { 223 ,  222 ,  250 } ,
    { 222 ,  249 ,  250 } ,
    { 221 ,  220 ,  249 } ,
    { 222 ,  221 ,  249 } ,
    { 220 ,  248 ,  249 } ,
    { 220 ,  219 ,  248 } ,
    { 219 ,  247 ,  248 } ,
    { 219 ,  218 ,  247 } ,
    { 218 ,  246 ,  247 } ,
    { 218 ,  217 ,  246 } ,
    { 217 ,  245 ,  246 } ,
    { 217 ,  216 ,  245 } ,
    { 216 ,  244 ,  245 } ,
    { 216 ,  215 ,  244 } ,
    { 215 ,  243 ,  244 } ,
    { 215 ,  214 ,  243 } ,
    { 214 ,  242 ,  243 } ,
    { 214 ,  241 ,  242 } ,
    { 22 ,  213 ,  240 } ,
    { 213 ,  239 ,  240 } ,
    { 213 ,  212 ,  239 } ,
    { 212 ,  238 ,  239 } ,
    { 212 ,  211 ,  238 } ,
    { 211 ,  237 ,  238 } ,
    { 211 ,  210 ,  237 } ,
    { 210 ,  236 ,  237 } ,
    { 184 ,  209 ,  236 } ,
    { 210 ,  184 ,  236 } ,
    { 183 ,  208 ,  235 } ,
    { 209 ,  183 ,  235 } ,
    { 182 ,  207 ,  234 } ,
    { 208 ,  182 ,  234 } ,
    { 207 ,  181 ,  233 } ,
    { 16 ,  206 ,  232 } ,
    { 206 ,  38 ,  232 } ,
    { 132 ,  109 ,  231 } ,
    { 109 ,  205 ,  231 } ,
    { 204 ,  203 ,  230 } ,
    { 203 ,  229 ,  230 } ,
    { 176 ,  202 ,  229 } ,
    { 203 ,  176 ,  229 } ,
    { 175 ,  201 ,  228 } ,
    { 202 ,  175 ,  228 } ,
    { 174 ,  200 ,  227 } ,
    { 201 ,  174 ,  227 } ,
    { 173 ,  199 ,  226 } ,
    { 200 ,  173 ,  226 } ,
    { 199 ,  198 ,  225 } ,
    { 198 ,  224 ,  225 } ,
    { 198 ,  197 ,  224 } ,
    { 197 ,  223 ,  224 } ,
    { 197 ,  196 ,  223 } ,
    { 196 ,  222 ,  223 } ,
    { 196 ,  195 ,  222 } ,
    { 195 ,  221 ,  222 } ,
    { 194 ,  193 ,  221 } ,
    { 195 ,  194 ,  221 } ,
    { 193 ,  220 ,  221 } ,
    { 193 ,  192 ,  220 } ,
    { 192 ,  219 ,  220 } ,
    { 192 ,  191 ,  219 } ,
    { 191 ,  218 ,  219 } ,
    { 191 ,  190 ,  218 } ,
    { 190 ,  217 ,  218 } ,
    { 190 ,  189 ,  217 } ,
    { 189 ,  216 ,  217 } ,
    { 189 ,  188 ,  216 } ,
    { 188 ,  215 ,  216 } ,
    { 188 ,  214 ,  215 } ,
    { 188 ,  22 ,  214 } ,
    { 22 ,  187 ,  213 } ,
    { 187 ,  212 ,  213 } ,
    { 187 ,  186 ,  212 } ,
    { 186 ,  211 ,  212 } ,
    { 186 ,  185 ,  211 } ,
    { 185 ,  210 ,  211 } ,
    { 185 ,  184 ,  210 } ,
    { 158 ,  183 ,  209 } ,
    { 184 ,  158 ,  209 } ,
    { 157 ,  182 ,  208 } ,
    { 183 ,  157 ,  208 } ,
    { 156 ,  181 ,  207 } ,
    { 182 ,  156 ,  207 } ,
    { 16 ,  180 ,  206 } ,
    { 180 ,  38 ,  206 } ,
    { 109 ,  179 ,  205 } ,
    { 178 ,  177 ,  204 } ,
    { 177 ,  203 ,  204 } ,
    { 151 ,  176 ,  203 } ,
    { 177 ,  151 ,  203 } ,
    { 150 ,  175 ,  202 } ,
    { 176 ,  150 ,  202 } ,
    { 149 ,  174 ,  201 } ,
    { 175 ,  149 ,  201 } ,
    { 148 ,  173 ,  200 } ,
    { 174 ,  148 ,  200 } ,
    { 147 ,  172 ,  199 } ,
    { 173 ,  147 ,  199 } ,
    { 172 ,  198 ,  199 } ,
    { 172 ,  171 ,  198 } ,
    { 171 ,  197 ,  198 } ,
    { 171 ,  170 ,  197 } ,
    { 170 ,  196 ,  197 } ,
    { 170 ,  169 ,  196 } ,
    { 169 ,  195 ,  196 } ,
    { 169 ,  168 ,  195 } ,
    { 168 ,  194 ,  195 } ,
    { 167 ,  166 ,  194 } ,
    { 168 ,  167 ,  194 } ,
    { 166 ,  193 ,  194 } ,
    { 166 ,  165 ,  193 } ,
    { 165 ,  192 ,  193 } ,
    { 165 ,  164 ,  192 } ,
    { 164 ,  191 ,  192 } ,
    { 164 ,  163 ,  191 } ,
    { 163 ,  190 ,  191 } ,
    { 163 ,  162 ,  190 } ,
    { 162 ,  189 ,  190 } ,
    { 162 ,  188 ,  189 } ,
    { 162 ,  22 ,  188 } ,
    { 22 ,  161 ,  187 } ,
    { 161 ,  186 ,  187 } ,
    { 161 ,  160 ,  186 } ,
    { 160 ,  185 ,  186 } ,
    { 160 ,  159 ,  185 } ,
    { 159 ,  184 ,  185 } ,
    { 135 ,  158 ,  184 } ,
    { 159 ,  135 ,  184 } ,
    { 134 ,  157 ,  183 } ,
    { 158 ,  134 ,  183 } ,
    { 133 ,  156 ,  182 } ,
    { 157 ,  133 ,  182 } ,
    { 16 ,  155 ,  180 } ,
    { 155 ,  38 ,  180 } ,
    { 109 ,  86 ,  179 } ,
    { 154 ,  16 ,  179 } ,
    { 86 ,  154 ,  179 } ,
    { 153 ,  152 ,  178 } ,
    { 152 ,  177 ,  178 } ,
    { 127 ,  151 ,  177 } ,
    { 152 ,  127 ,  177 } ,
    { 126 ,  150 ,  176 } ,
    { 151 ,  126 ,  176 } ,
    { 125 ,  149 ,  175 } ,
    { 150 ,  125 ,  175 } ,
    { 124 ,  148 ,  174 } ,
    { 149 ,  124 ,  174 } ,
    { 123 ,  147 ,  173 } ,
    { 148 ,  123 ,  173 } ,
    { 147 ,  146 ,  172 } ,
    { 146 ,  171 ,  172 } ,
    { 146 ,  145 ,  171 } ,
    { 145 ,  170 ,  171 } ,
    { 145 ,  144 ,  170 } ,
    { 144 ,  169 ,  170 } ,
    { 144 ,  143 ,  169 } ,
    { 143 ,  168 ,  169 } ,
    { 143 ,  142 ,  168 } ,
    { 142 ,  167 ,  168 } ,
    { 142 ,  141 ,  167 } ,
    { 141 ,  166 ,  167 } ,
    { 140 ,  139 ,  166 } ,
    { 141 ,  140 ,  166 } ,
    { 139 ,  165 ,  166 } ,
    { 139 ,  138 ,  165 } ,
    { 138 ,  164 ,  165 } ,
    { 138 ,  137 ,  164 } ,
    { 137 ,  163 ,  164 } ,
    { 137 ,  162 ,  163 } ,
    { 137 ,  22 ,  162 } ,
    { 22 ,  160 ,  161 } ,
    { 22 ,  136 ,  160 } ,
    { 136 ,  159 ,  160 } ,
    { 136 ,  135 ,  159 } ,
    { 111 ,  134 ,  158 } ,
    { 135 ,  111 ,  158 } ,
    { 110 ,  133 ,  157 } ,
    { 134 ,  110 ,  157 } ,
    { 109 ,  132 ,  156 } ,
    { 133 ,  109 ,  156 } ,
    { 16 ,  131 ,  155 } ,
    { 131 ,  38 ,  155 } ,
    { 86 ,  63 ,  154 } ,
    { 130 ,  16 ,  154 } ,
    { 63 ,  130 ,  154 } ,
    { 129 ,  128 ,  153 } ,
    { 128 ,  152 ,  153 } ,
    { 104 ,  127 ,  152 } ,
    { 128 ,  104 ,  152 } ,
    { 103 ,  126 ,  151 } ,
    { 127 ,  103 ,  151 } ,
    { 102 ,  125 ,  150 } ,
    { 126 ,  102 ,  150 } ,
    { 101 ,  124 ,  149 } ,
    { 125 ,  101 ,  149 } ,
    { 100 ,  123 ,  148 } ,
    { 124 ,  100 ,  148 } ,
    { 99 ,  122 ,  147 } ,
    { 123 ,  99 ,  147 } ,
    { 122 ,  146 ,  147 } ,
    { 122 ,  121 ,  146 } ,
    { 121 ,  145 ,  146 } ,
    { 121 ,  120 ,  145 } ,
    { 120 ,  144 ,  145 } ,
    { 120 ,  119 ,  144 } ,
    { 119 ,  143 ,  144 } ,
    { 119 ,  118 ,  143 } ,
    { 118 ,  142 ,  143 } ,
    { 118 ,  117 ,  142 } ,
    { 117 ,  141 ,  142 } ,
    { 117 ,  116 ,  141 } ,
    { 116 ,  140 ,  141 } ,
    { 115 ,  114 ,  140 } ,
    { 116 ,  115 ,  140 } ,
    { 114 ,  139 ,  140 } ,
    { 114 ,  113 ,  139 } ,
    { 113 ,  138 ,  139 } ,
    { 113 ,  137 ,  138 } ,
    { 113 ,  22 ,  137 } ,
    { 22 ,  112 ,  136 } ,
    { 112 ,  135 ,  136 } ,
    { 112 ,  111 ,  135 } ,
    { 88 ,  110 ,  134 } ,
    { 111 ,  88 ,  134 } ,
    { 87 ,  109 ,  133 } ,
    { 110 ,  87 ,  133 } ,
    { 16 ,  108 ,  131 } ,
    { 108 ,  38 ,  131 } ,
    { 63 ,  107 ,  130 } ,
    { 107 ,  16 ,  130 } ,
    { 106 ,  105 ,  129 } ,
    { 105 ,  128 ,  129 } ,
    { 81 ,  104 ,  128 } ,
    { 105 ,  81 ,  128 } ,
    { 80 ,  103 ,  127 } ,
    { 104 ,  80 ,  127 } ,
    { 79 ,  102 ,  126 } ,
    { 103 ,  79 ,  126 } ,
    { 78 ,  101 ,  125 } ,
    { 102 ,  78 ,  125 } ,
    { 77 ,  100 ,  124 } ,
    { 101 ,  77 ,  124 } ,
    { 76 ,  99 ,  123 } ,
    { 100 ,  76 ,  123 } ,
    { 75 ,  98 ,  122 } ,
    { 99 ,  75 ,  122 } ,
    { 98 ,  121 ,  122 } ,
    { 98 ,  97 ,  121 } ,
    { 97 ,  120 ,  121 } ,
    { 97 ,  96 ,  120 } ,
    { 96 ,  119 ,  120 } ,
    { 96 ,  95 ,  119 } ,
    { 95 ,  118 ,  119 } ,
    { 95 ,  94 ,  118 } ,
    { 94 ,  117 ,  118 } ,
    { 94 ,  93 ,  117 } ,
    { 93 ,  116 ,  117 } ,
    { 93 ,  92 ,  116 } ,
    { 92 ,  115 ,  116 } ,
    { 91 ,  90 ,  115 } ,
    { 92 ,  91 ,  115 } ,
    { 90 ,  114 ,  115 } ,
    { 90 ,  113 ,  114 } ,
    { 90 ,  22 ,  113 } ,
    { 22 ,  89 ,  112 } ,
    { 89 ,  111 ,  112 } ,
    { 89 ,  88 ,  111 } ,
    { 64 ,  87 ,  110 } ,
    { 88 ,  64 ,  110 } ,
    { 63 ,  86 ,  109 } ,
    { 87 ,  63 ,  109 } ,
    { 16 ,  85 ,  108 } ,
    { 85 ,  38 ,  108 } ,
    { 63 ,  84 ,  107 } ,
    { 84 ,  16 ,  107 } ,
    { 83 ,  82 ,  106 } ,
    { 82 ,  105 ,  106 } ,
    { 58 ,  81 ,  105 } ,
    { 82 ,  58 ,  105 } ,
    { 57 ,  80 ,  104 } ,
    { 81 ,  57 ,  104 } ,
    { 56 ,  79 ,  103 } ,
    { 80 ,  56 ,  103 } ,
    { 55 ,  78 ,  102 } ,
    { 79 ,  55 ,  102 } ,
    { 54 ,  77 ,  101 } ,
    { 78 ,  54 ,  101 } ,
    { 53 ,  76 ,  100 } ,
    { 77 ,  53 ,  100 } ,
    { 52 ,  75 ,  99 } ,
    { 76 ,  52 ,  99 } ,
    { 75 ,  74 ,  98 } ,
    { 74 ,  97 ,  98 } ,
    { 74 ,  73 ,  97 } ,
    { 73 ,  96 ,  97 } ,
    { 73 ,  72 ,  96 } ,
    { 72 ,  95 ,  96 } ,
    { 72 ,  71 ,  95 } ,
    { 71 ,  94 ,  95 } ,
    { 71 ,  70 ,  94 } ,
    { 70 ,  93 ,  94 } ,
    { 70 ,  69 ,  93 } ,
    { 69 ,  92 ,  93 } ,
    { 69 ,  68 ,  92 } ,
    { 68 ,  91 ,  92 } ,
    { 68 ,  67 ,  91 } ,
    { 67 ,  90 ,  91 } ,
    { 67 ,  22 ,  90 } ,
    { 66 ,  65 ,  89 } ,
    { 22 ,  66 ,  89 } ,
    { 65 ,  88 ,  89 } ,
    { 65 ,  64 ,  88 } ,
    { 41 ,  63 ,  87 } ,
    { 64 ,  41 ,  87 } ,
    { 16 ,  62 ,  85 } ,
    { 62 ,  38 ,  85 } ,
    { 61 ,  16 ,  84 } ,
    { 63 ,  61 ,  84 } ,
    { 60 ,  59 ,  83 } ,
    { 59 ,  82 ,  83 } ,
    { 36 ,  58 ,  82 } ,
    { 59 ,  36 ,  82 } ,
    { 35 ,  57 ,  81 } ,
    { 58 ,  35 ,  81 } ,
    { 34 ,  56 ,  80 } ,
    { 57 ,  34 ,  80 } ,
    { 33 ,  55 ,  79 } ,
    { 56 ,  33 ,  79 } ,
    { 32 ,  54 ,  78 } ,
    { 55 ,  32 ,  78 } ,
    { 31 ,  53 ,  77 } ,
    { 54 ,  31 ,  77 } ,
    { 30 ,  52 ,  76 } ,
    { 53 ,  30 ,  76 } ,
    { 29 ,  51 ,  75 } ,
    { 52 ,  29 ,  75 } ,
    { 51 ,  74 ,  75 } ,
    { 51 ,  50 ,  74 } ,
    { 50 ,  73 ,  74 } ,
    { 50 ,  49 ,  73 } ,
    { 49 ,  72 ,  73 } ,
    { 49 ,  48 ,  72 } ,
    { 48 ,  71 ,  72 } ,
    { 48 ,  47 ,  71 } ,
    { 47 ,  70 ,  71 } ,
    { 47 ,  46 ,  70 } ,
    { 46 ,  69 ,  70 } ,
    { 46 ,  45 ,  69 } ,
    { 45 ,  68 ,  69 } ,
    { 45 ,  44 ,  68 } ,
    { 44 ,  67 ,  68 } ,
    { 44 ,  22 ,  67 } ,
    { 22 ,  21 ,  66 } ,
    { 21 ,  65 ,  66 } ,
    { 21 ,  20 ,  65 } ,
    { 43 ,  42 ,  65 } ,
    { 20 ,  43 ,  65 } ,
    { 42 ,  64 ,  65 } ,
    { 42 ,  41 ,  64 } ,
    { 41 ,  39 ,  63 } ,
    { 39 ,  61 ,  63 } ,
    { 16 ,  40 ,  62 } ,
    { 40 ,  38 ,  62 } ,
    { 39 ,  16 ,  61 } ,
    { 38 ,  37 ,  60 } ,
    { 37 ,  59 ,  60 } ,
    { 37 ,  36 ,  59 } ,
    { 36 ,  35 ,  58 } ,
    { 35 ,  34 ,  57 } ,
    { 34 ,  33 ,  56 } ,
    { 33 ,  32 ,  55 } ,
    { 32 ,  31 ,  54 } ,
    { 31 ,  30 ,  53 } ,
    { 30 ,  29 ,  52 } ,
    { 29 ,  28 ,  51 } ,
    { 28 ,  50 ,  51 } ,
    { 28 ,  27 ,  50 } ,
    { 27 ,  49 ,  50 } ,
    { 27 ,  26 ,  49 } ,
    { 26 ,  48 ,  49 } ,
    { 26 ,  25 ,  48 } ,
    { 25 ,  47 ,  48 } ,
    { 25 ,  24 ,  47 } ,
    { 24 ,  46 ,  47 } ,
    { 24 ,  23 ,  46 } ,
    { 23 ,  45 ,  46 } ,
    { 23 ,  22 ,  45 } ,
    { 22 ,  44 ,  45 } ,
    { 20 ,  19 ,  43 } ,
    { 19 ,  42 ,  43 } ,
    { 18 ,  17 ,  42 } ,
    { 19 ,  18 ,  42 } ,
    { 17 ,  41 ,  42 } ,
    { 17 ,  0 ,  41 } ,
    { 0 ,  39 ,  41 } ,
    { 16 ,  38 ,  40 } ,
    { 0 ,  16 ,  39 } ,
    { 2 ,  1 ,  38 } ,
    { 3 ,  2 ,  38 } ,
    { 4 ,  3 ,  38 } ,
    { 5 ,  4 ,  38 } ,
    { 6 ,  5 ,  38 } ,
    { 7 ,  6 ,  38 } ,
    { 8 ,  7 ,  38 } ,
    { 9 ,  8 ,  38 } ,
    { 10 ,  9 ,  38 } ,
    { 11 ,  10 ,  38 } ,
    { 12 ,  11 ,  38 } ,
    { 13 ,  12 ,  38 } ,
    { 14 ,  13 ,  38 } ,
    { 15 ,  14 ,  38 } ,
    { 16 ,  15 ,  38 } ,
    { 1 ,  17 ,  38 } ,
    { 17 ,  37 ,  38 } ,
    { 17 ,  36 ,  37 } ,
    { 17 ,  35 ,  36 } ,
    { 17 ,  34 ,  35 } ,
    { 17 ,  33 ,  34 } ,
    { 17 ,  32 ,  33 } ,
    { 17 ,  31 ,  32 } ,
    { 17 ,  30 ,  31 } ,
    { 17 ,  29 ,  30 } ,
    { 17 ,  28 ,  29 } ,
    { 17 ,  27 ,  28 } ,
    { 17 ,  26 ,  27 } ,
    { 17 ,  25 ,  26 } ,
    { 17 ,  24 ,  25 } ,
    { 17 ,  23 ,  24 } ,
    { 17 ,  22 ,  23 } ,
    { 17 ,  18 ,  22 } ,
    { 18 ,  19 ,  22 } ,
    { 19 ,  20 ,  22 } ,
    { 20 ,  21 ,  22 } ,
    { 1 ,  0 ,  17 } ,
    { 0 ,  1 ,  16 } ,
    { 1 ,  2 ,  16 } ,
    { 2 ,  3 ,  16 } ,
    { 3 ,  4 ,  16 } ,
    { 4 ,  5 ,  16 } ,
    { 5 ,  6 ,  16 } ,
    { 6 ,  7 ,  16 } ,
    { 7 ,  8 ,  16 } ,
    { 8 ,  9 ,  16 } ,
    { 9 ,  11 ,  16 } ,
    { 11 ,  12 ,  16 } ,
    { 12 ,  15 ,  16 } ,
    { 12 ,  14 ,  15 } ,
    { 12 ,  13 ,  14 } ,
    { 9 ,  10 ,  11 } 
};
const ULONG g_NumsRGBTriangles = sizeof(g_sRGBTriangles)/sizeof(g_sRGBTriangles[0]);

const PrimaryXYZColors g_sRGBPrimaries = 
{    
        {.4124f, .2126f, .0193f},       // red
        {0.77f, 0.9278f, 0.1385f},      // yellow
        {.3576f, .7152f, .1192f},       // green
        {.5381f, .7874f, 1.0697f},      // cyan
        {.1805f, .0722f, .9505f},       // blue
        {.5929f, .2848f, .9698f},       // magenta
        {0.0f, 0.0f, 0.0f},             // black
        {.9505f, 1.0f, 1.089f}          // white
};

const XYZColorF g_sRGBNeutralAxis[] = 
{
        //
        // Insert additional neutral colors as necessary
        //
        {0.0f, 0.0f, 0.0f},             // black
        {.9505f, 1.0f, 1.089f}          // white   
};
const ULONG g_NumsRGBNeutralAxis = sizeof(g_sRGBNeutralAxis)/sizeof(g_sRGBNeutralAxis[0]);
